
  <h2>Organization</h2>
    <h3>CourseStore</h3>
      <p>
        Files: <tt>BASE/courses</tt>
        Assignments are stored in a directory hierarchy.
        Each directory can contain an "<tt>info</tt>" file, a simple key/value listing of attributes for that directory.
        Attributes are inherited by child directories.
      <pre>
        title: My Course Part
        start: 2009-09-01
        end:   2010-01-01
        language: java
      </pre>
      <p>
        Attributes with name "<tt>child <i>attr</i></tt>" are only applied to children.
      <p>
        $program makes no distinction between assignments, courses, weeks, etc..
        Each is stored as a directory.
        
    <h3>Frontend</h3>
      <p>
        Files: <tt>BASE/frontend</tt>
        The frontend consists of a webserver that serves information to students and administrators.
        The frontend is written in PHP and communicates with a database and the CourseStore.
        Submissions are made to the frontend.
        
    <h3>Backend</h3>
      <p>
        Files: <tt>BASE/backend</tt>
        The backends are responsible for judging submissions.
        It is a deamon shellscript that continually asks the webserver for new submissions over HTTP.
        Multiple backends can be running at the same time.
 
  <h2>Directory structure</h2>
    <pre>
      * submissions/
          * pending/
             * submission1234-username,username
          * all/
             * course/
                * section/
                 .. 
                  * problem/
                     * passed/
                     * failed/
                        * submission1-username,username,username/
                           * info?
                           * files
                           * test1.in  (?)
                           * test1.out
                           * test1.diff
                           * test1.err
                           * compiler.err
      * courses/
        * ..
           * problem/
              * info
              * test1.in
              * reference.java
              * .generated/
                  * test1.out
    </pre>


  <h2>Attributes</h2>
    <table>
      <tr><th colspan="3">Description
      <tr><th><tt>title</tt>
          <td>Title of the entity/directory/assignment
          <td>the filename
      <tr><th><tt>order</tt>
          <td>Position in which this element should appear in the sorted list (note: string comparison is used).
          <td>the filename
      <tr><th><tt>visible</tt>
          <td>Is this entity visible?
              Possible values are <tt>true</tt> and <tt>false</tt>
          <td><tt>true</tt>
      <tr><th><tt>show date</tt>
          <td>When does this entity become visible to students?
              Should be an ISO date, like "<tt>2009-09-01 09:00</tt>".
              Time is optional, the default is "<tt>00:00</tt>". Note that the time can be "<tt>24:00</tt>".
              Other possiblities are "<tt>always</tt>" and "<tt>never</tt>".
          <td><tt>always</tt>
      <tr><th><tt>hide date</tt>
          <td>After which date will the entity be hidden?
              Can be an ISO date, or a date relative to the show date. For example "<tt>+ 7 days</tt>" or "<tt>next Tuesday</tt>".
          <td><tt>never</tt>
      <tr><th><tt>downloadable files</tt>
          <td>A space separated list of files that can be downloaded by students.
          <td><em>none</em>
              
      <tr><th colspan="3">Submitting
      <tr><th><tt>submitable</tt>
          <td>Can submissions be made for this entity, i.e. is it an assignment?.
          <td><tt>false</tt>
      <tr><th><tt>start date</tt>
          <td>When does this assignment become available for submission?
          <td><tt>always</tt>
      <tr><th><tt>end date</tt>
          <td>When is the submission deadline? Can be relative to the start date.
          <td><tt>never</tt>
      <tr><th><tt>keep best</tt>
          <td>Keep the best submission (as opposed to the last one)
          <td><tt>true</tt>
          
      <tr><th colspan="3">Compiling
      <tr><th><tt>language</tt>
          <td>The programming language the submissions must be made in.
          <td><i>by extension</i>
      <tr><th><tt>filename regex</tt>
          <td>Regular expression that filename of submissions is matched against.
              By default based on <tt>language</tt>
          <td><i>by language</i>
      <tr><th><tt>allow archives</tt>
          <td>Can multi-file archives be submitted?
          <td><tt>false</tt>
      <tr><th><tt>compile</tt>
          <td>Should submissions be compiled?
          <td><tt>true</tt>
      <tr><th><tt>compiler</tt>
          <td>Compiler script to use (from <tt>backend/compiler</tt>).
          <td><i>by language</i>
      <tr><th><tt>compiler flags</tt>
          <td>Additional flags to pass to the compiler.
          <td><em>none</em>
      <tr><th><tt>compiler files</tt>
          <td>Files that should be made available to the compiler and the runner.
              Note: you also have to pass the names as <tt>compiler flags</tt> to link them in.
          <td><em>none</em>
          
      <tr><th colspan="3">Testing
      <tr><th><tt>reference implementation</tt>
          <td>Path to the source code of a reference implementation.
          <td><i>automatic</i>
      <tr><th><tt>runner</tt>
          <td>Wrapper for running the program (from <tt>backend/runner</tt>).
          <td>"<tt>run</tt>"
      <tr><th><tt>checker</tt>
          <td>Program used to check the output (from <tt>backend/checker</tt>).
              Default is the simple unix diff program.
              Note that the checker is only used if there are any test cases, in files name <tt><i>x</i>.in</tt>.
          <td>"<tt>diff</tt>"
      <tr><th><tt>time limit</tt>
          <td>Timelimit for running the program on a single test case, in seconds
          <td>1
      <tr><th><tt>memory limit</tt>
          <td>Limit on the amount of memory that may be used, in KiB
          <td>100000
          
      <tr><th colspan="3">Feedback
      <tr><th><tt>show compile errors</i></tt>
          <td>Should compiler errors be shown? (syntax errors, typing errors, etc.)
          <td>true
      <tr><th><tt>show run errors</i></tt>
          <td>Should runtime errors be shown? (stack overflow, div by 0, etc.) For which test cases?
              Possible values are:
              <ul>
                <li>A space separated list of test cases.
                <li>"<tt>none</tt>".
                <li>"<tt>all</tt>".
              </ul>
          <td>"<tt>all</tt>"
      <tr><th><tt>show input/output</tt>
          <td>Should the input, output and a diff be shown? For which test cases?
          <td>"<tt>none</tt>"
      <!--<tr><th><tt>failure feedback for <i>x</i></tt>
          <td>The message shown to the student if test case <i>x</i> fails.
          <td>""
      <tr><th><tt>failure feedback</tt>
          <td>Default for above.
          <td>""-->
          
      <tr><th colspan="3">Groups
      <tr><th><tt>max group size</tt>
          <td>Maximum number of students that can submit as a single group.
          <td><i>unbounded</i>
      <!--<tr><th><tt>defines groups</tt>
          <td>Groups are by default formed for the duration of this entity.
          <td><tt>true</t> for courses-->
    </table>
